public class Method {
    public static void main(String[] args) {
        Person p1 = new Person();
        //p1.speak();
        p1.age = 2;
        p1.test(p1); // 传递的是地址，可以通过形参修改实参
        System.out.println("main方法中的age:"+p1.age);
        // main方法中的p1指向仍然不变，只是test2中的p指向为空了
        p1.test2(p1);
        System.out.println("执行test2方法后的age:"+p1.age);

        int a =10;
        int b =20;
        AA obj = new AA();
        obj.swap(a,b);  // 传递的是实参
        System.out.println("main方法的值=a:"+a+" b:"+b);

        B b2 = new B();
        int[] arr= {1,2,3};
        b2.test(arr); // 传递的是地址，可以通过形参修改实参
        System.out.println("main方法中arr[0]的值=a:"+arr[0]);
    }
}

class Person{
    String name;
    int age;

    public void speak(){
        System.out.println("我是一个好人");
    }

    public void test(Person p){
        p.age = 10;
        System.out.println("test方法中的age:"+p.age);
    }

    public void test2(Person p){
        p=null;
    }
}

class AA{
    public void swap(int a,int b){
        int swap = a;
        a=b;
        b=swap;
        System.out.println("a和b交换后的值=a[0]:"+a+" b:"+b);
    }
}

class B{
    public void test(int[] arr){
        arr[0] = 200;
        System.out.println("test方法执行后arr[0]的值=a[0]:"+arr[0]);
    }
}